T1-签到题(easy)
给定长度为 n 的数组 a 和长度为 m 的数组 b,构建大小为 n×m 的网格,其中单元格 (x,y) 中的值为 Cx,y=ax+by。
从 (1, 1) 开始,每一步都要选择一个位于右下方的网格单元格进行移动,直到到达 (n,m),目标是最大化路径上相邻单元格之间的绝对差值之和。
从形式上看,您的目标是找到满足以下条件的序列 (x1,y1),(x2,y2),…,(xk,yk):
- (x1,y1)=(1,1)
- (xk,yk)=(n,m)
- xi≤xi+1,yi≤yi+1,(xi,yi)=(xi+1,yi+1)∀i∈[1,k)
同时使 ∑i=1k−1∣Cxi,yi−Cxi+1,yi+1∣ 最大化。
1≤n,m,ai,bi≤105。
相邻两个不同的限制是无所谓的,因为对答案没有影响。又因为根据绝对值的性质,有 ∣A−B∣≤∣A−C∣+∣C−B∣,所以可以发现每次往右或往下走一步是最优的。
而由于权值 Cx,y=ax+by,所以 ∣Cx′,y′−Cx,y∣ 实际等于 ∣ax+1−ax∣ 或 ∣by+1−by∣,并且无论路径如何,答案都等于 ∑i=1n−1∣ai+1−ai∣+∑i=1m−1∣bi+1−bi∣,故直接输出即可。
时间复杂度 O(n+m)。
T2-简单题(simple)
给定一棵 n 个点的树,问有多少个非空路径集合,使得集合内的路径的点集的交非空,答案对 998244353 取模。
在本题中,我们认为路径的两个端点不能相同,且我们不区分端点的顺序,即路径 (1,2) 和路径 (2,1) 我们认为是一样的。
1≤n≤106。
考虑到路径的交一定是一条路径,于是想到点减边容斥,于是只需要单独考虑所有点和边,计算被所有 路径覆盖的方案即可。
时间复杂度 O(nlogn)。
T3-入门题(basic)
定义一个序列 a1,a2,…,am 是好的当且仅当满足以下条件:
- ai>0
- ∀1≤i≤m−1,∣ai−ai+1∣=1
- ∑i=1mai=n
对于一个序列 a1,a2,…,am,定义
f(a)=∑i=1m−1[ai>ai+1]
求所有好的序列的 cf(a) 之和,对 998244353 取模。
在本题中,我们认为 00=1。
1≤n≤3×105,0≤c<998244353。
Sub 2
记 fi,j,k 表示当前序列长度为 i 和为 j,最后一个数为 k 的权值之和。
复杂度 O(n3)。
Sub 3
记 fi,j 表示当前序列和为 i,最后一个数为 j 的权值和。
复杂度 O(n2)。
Sub 4
注意到,序列长度和值域不能同时太大,于是考虑按 a1 的大小分类。
记 S 表示最小的使得 2S×(S+1)>n 的数。
若 a1<S 直接跑 Sub3 的 DP,复杂度 O(n1.5)。
若 a1≥S 则不用考虑 ai>0 的限制,约定 a1=0,枚举长度后直接跑 Sub2 的 DP。
总复杂度 O(n58)。
Sub 5
考虑优化 a1≥S 部分的 DP,为了第二部分可以不计最后一个数是多少,于是考虑倒着加数,由于我们确定了 a1=0,于是往前加一个数的贡献就是整体上移或下移,于是可以优化到 O(n1.5)。
T4-送分题(freebie)
小 A 和小 B 将玩一个游戏。
初始时,有一个可重集,每轮开始时,双方各选择一个元素,但是双方都不知道对方的选择。
若双方的选择相同(注意,并不是指值相同。如 {1,1},我们认为选择第一个 1 和选择第二个 1 是不同的选择),则将这个元素删除。此时,若可重集内没有元素,则游戏结束,否则,继续下一轮。
若选择不同,则小 A 得到这个元素的值的分数,并结束游戏。
小 A 想让自己的得分最大化,小 B 想让小 A 的得分最小化,若双方都足够聪明,求最终小 A 得分的期望。
相对或绝对误差小于 10−6 则视为正确。
1≤n≤22,可重集内元素 ∈[1,109]。
首先,小B的策略一定是基于概率的,即对于一个局面,小B会对于每个物品都有一个概率表示当前局面下选这个物品的概率,然后按概率随机选择一个。
考虑状压 DP,令 fS 表示还剩 S 以内的题没被选中时你的期望得分的最大值,不妨令 bi 表示除去 i 题后期望得分的最大值,即 fS∣i,pi 表示小B选中第 i 题的概率,那么有转移:
fS=minp1+⋯+p∣S∣=1maxi(pibi+(1−pi)ai)
不妨将 ai 从大到小排序,其一定满足 ∀i≤j,bi≤bj,先让所有 pi←0,令 ci 表示当前的 pibi+(1−pi)ai,那么初始有 ci=ai,接下来一步步调整 pi,看 maxci 能取到的最小值,如果某个时刻 ∑pi>1,那么撤回这一步骤作,将 1−∑pi 平均分配到前面这些 ci 中。如果有 ai≤bi,那么 maxci 的最小值只能是 ai。
直接模拟上面的过程即可,时间复杂度 O(n2n)。